﻿using System.Runtime.CompilerServices;

namespace FrameworkCore.Modules.Engines;

#nullable disable

/// <summary>
/// 提供对 NetModuler 引擎单例实例的访问。
/// </summary>
public partial class EngineContext
{
    #region 方法

    /// <summary>
    /// 创建 NetModuler 引擎的静态实例。
    /// </summary>
    [MethodImpl(MethodImplOptions.Synchronized)]
    public static IEngine Create()
    {
        // 创建 NetModulerEngine 作为引擎
        return Singleton<IEngine>.Instance ?? (Singleton<IEngine>.Instance = new NetModulerEngine());
    }

    /// <summary>
    /// 将静态引擎实例设置为提供的引擎。使用此方法可以提供自己的引擎实现。
    /// </summary>
    /// <param name="engine">要使用的引擎。</param>
    /// <remarks>只有当您知道自己在做什么时才使用此方法。</remarks>
    public static void Replace(IEngine engine)
    {
        Singleton<IEngine>.Instance = engine;
    }

    #endregion

    #region 属性

    /// <summary>
    /// 获取用于访问 NetModuler 服务的单例引擎。
    /// </summary>
    public static IEngine Current
    {
        get
        {
            if (Singleton<IEngine>.Instance == null)
            {
                Create();
            }

            return Singleton<IEngine>.Instance;
        }
    }

    #endregion
}
